home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (DO)
/
Softdisk Magazette Volume 1, No. 06 (1982-02)(Softdisk)(Side B).zip
/
Softdisk Magazette Volume 1, No. 06 (1982-02)(Softdisk)(Side B).do
/
MUSICIAN.bas
< prev
next >
Wrap
BASIC Source File
|
1996-12-24
|
7KB
|
178 lines
10 REM MUSICIAN
20 REM BY DANIEL TOBIAS 1/82
30 ONERR GOTO 200
50 TEXT : HOME
60 DIM LV%(9): FOR A = 1 TO 9: READ LV%(A): NEXT A
70 DATA 12,25,37,50,75,100,150,200,250
80 D$ = CHR$(4)
99 REM LINES 100 AND 110 POKE THE TONE MAKER INTO MEMORY<CTRL-J><CTRL-J>
100 POKE 770,173: POKE 771,48: POKE 772,192: POKE 773,136: POKE 774,208: POKE 775,4: POKE 776,198: POKE 777,7: POKE 778,240
110 POKE 779,8: POKE 780,202: POKE 781,208: POKE 782,246: POKE 783,166: POKE 784,6: POKE 785,76: POKE 786,2: POKE 787,3: POKE 788,96
120 PRINT : PRINT "<CTRL-D>NOMONC,I,O"
130 OP$ = "<CTRL-D>OPEN ":WR$ = "<CTRL-D>WRITE ":CL$ = "<CTRL-D>CLOSE "
140 RE$ = "<CTRL-D>READ "
150 R = 770:T = 6:L = 7
160 DIM T%(500),L%(500)
170 DIM N$(500)
180 DIM NO%(100):A = 1
190 READ NO%(A): IF NO%(A) < > -999 THEN A = A +1: GOTO 190
195 NN = A -1
200 REM START
210 HOME : PRINT "****************************************": PRINT "MUSICIAN - BY DANIEL TOBIAS - JAN. 1982": PRINT : PRINT "****************************************"
220 PRINT : PRINT "YOUR CHOICE:"
230 PRINT : PRINT " (1) WRITE NEW SONG"
240 PRINT : PRINT " (2) EDIT SONG"
250 PRINT : PRINT " (3) PLAY BACK SONG"
260 PRINT : PRINT " (4) USE KEYBOARD AS ORGAN"
265 PRINT : PRINT " (5) SAVE TO DISK"
267 PRINT : PRINT " (6) LOAD FROM DISK": PRINT : PRINT " (7) QUIT"
270 PRINT : PRINT "WHICH? ";: GET I$: IF VAL(I$) < = 0 OR VAL(I$) >7 THEN 200
280 IF VAL(I$) = 7 THEN HOME : PRINT : END
285 IF VAL(I$) = 4 THEN GOSUB 300: GOTO 200
286 IF VAL(I$) = 1 THEN NL = 0:N = 1: GOSUB 700: GOTO 200
287 IF VAL(I$) = 2 THEN HOME : PRINT : INPUT "NOTE # TO START AT: ";N: IF N >0 THEN GOSUB 700: GOTO 200
290 IF VAL(I$) = 3 THEN GOSUB 900: GOTO 200
292 IF VAL(I$) = 5 THEN GOSUB 4000: GOTO 200
294 IF VAL(I$) = 6 THEN GOSUB 5000: GOTO 200
299 GOTO 200
300 REM PLAY MUSIC:NO PROG.
305 L% = 100
307 HOME : GOSUB 3000
308 VTAB 3: PRINT "LENGTH: ";L%
310 HTAB 1: VTAB 6: GOSUB 1000
315 IF T% = -2 THEN GOSUB 500
316 IF T% = -7 THEN GOSUB 600: VTAB 3: PRINT "LENGTH: ";L%
317 IF T% = -8 THEN RETURN
320 IF T% <0 THEN 310
325 HTAB 1: VTAB 1: CALL -868: PRINT "NOTE: "I$: VTAB 4: CALL -868: PRINT "TONE: ";T%
330 IF T% = 0 THEN GOSUB 400: GOTO 310
340 POKE T,T%: POKE L,L%: CALL R: GOTO 310
400 REM REST
410 FOR A = 1 TO L%(B) *2: NEXT A
420 RETURN
500 REM CHANGE LENGTH
510 HTAB 1: PRINT "L";: HTAB 1: GET I$: PRINT " ";
520 I = VAL(I$)
530 IF I = 0 THEN RETURN
540 L% = LV%(I)
580 VTAB 3: HTAB 1: PRINT "LENGTH: ";L%;: CALL -868
590 RETURN
600 REM NONSTANDARD NOTE
610 HTAB 1: VTAB 3: CALL -868: INPUT "LENGTH: ";A$:L% = VAL(A$)
620 IF L% <0 OR L% >255 THEN 610
630 HTAB 1: VTAB 4: CALL -868: INPUT "TONE: ";A$:T% = VAL(A$)
640 IF T% <0 OR T% >255 THEN 630
645 I$ = "*"
650 RETURN
700 REM PROGRAM
705 HOME
706 GOSUB 3000
707 L% = 100
709 IF N >NL THEN N$(N) = ""
710 HTAB 1: VTAB 1: PRINT "NOTE #"N" : "N$(N);: CALL -868
720 PRINT : IF N >NL THEN T%(N) = 0:L%(N) = L%
725 PRINT
730 PRINT "LENGTH: ";L%(N);: CALL -868
740 PRINT : PRINT "TONE: ";T%(N);: CALL -868
742 IF N = 500 THEN RETURN
745 L% = L%(N):T% = T%(N)
746 IF T% = 0 THEN 750
747 POKE L,L%: POKE T,T%(N): CALL R
750 VTAB 6: HTAB 1: GOSUB 1000
755 IF T% = -2 THEN GOSUB 500
760 IF T% = -7 THEN GOSUB 600
765 IF T% = -8 THEN L%(N) = L%: RETURN
767 IF T% = -4 AND N >NL THEN T% = -1
770 IF T% = -4 THEN L%(N) = L%: GOTO 820
775 IF T% = -5 AND N = 1 THEN 750
780 IF T% = -5 THEN L%(N) = L%:N = N -1: GOTO 709
782 IF T% = -6 THEN GOSUB 2000: GOTO 710
784 IF T% = -3 THEN GOSUB 2100: GOTO 709
790 IF T% <0 THEN 750
795 IF T% = 0 THEN 810
800 POKE L,L%: POKE T,T%: CALL R
810 L%(N) = L%:T%(N) = T%
815 N$(N) = I$
820 N = N +1
825 IF N >NL +1 THEN NL = N -1
830 GOTO 709
900 REM PLAY BACK
910 HOME
915 IF NL = 0 THEN RETURN
920 FOR B = 1 TO NL
930 IF T%(B) = 0 THEN GOSUB 400
940 IF T%(B) >0 THEN POKE T,T%(B): POKE L,L%(B): CALL R
950 NEXT B
960 RETURN
999 END
1000 REM INPUT
1005 T% = -1
1010 GET I$
1020 IF I$ > = "A" AND I$ < = "Z" THEN T% = NO%( ASC(I$) -64): RETURN
1030 IF I$ = "," THEN T% = 38: RETURN
1040 IF I$ = "." THEN T% = 34: RETURN
1042 IF I$ = ";" THEN T% = 32: RETURN
1045 IF I$ > = "0" AND I$ <":" THEN T% = NO%( ASC(I$) -21): RETURN
1050 IF I$ = " " THEN T% = 0: RETURN
1060 IF I$ = ":" THEN T% = -2
1065 IF I$ = "-" THEN T% = -3
1070 IF I$ = CHR$(21) THEN T% = -4
1080 IF I$ = CHR$(8) THEN T% = -5
1090 IF I$ = "/" THEN T% = -6
1094 IF I$ = CHR$(13) THEN T% = -7
1096 IF I$ = CHR$(27) THEN T% = -8
1099 RETURN
2000 REM DELETE
2010 IF N = NL THEN NL = NL -1:T%(N) = 0:N$(N) = " ": RETURN
2020 IF N >NL THEN RETURN
2030 FOR A = N +1 TO NL
2040 T%(A -1) = T%(A):L%(A -1) = L%(A)
2045 N$(A -1) = N$(A)
2050 NEXT A:NL = NL -1
2060 RETURN
2100 REM INSERT
2105 L%(N) = L%
2110 IF N >NL THEN RETURN
2120 FOR A = NL TO N STEP -1
2130 T%(A +1) = T%(A):L%(A +1) = L%(A)
2135 N$(A +1) = N$(A)
2140 NEXT A:NL = NL +1:T%(N) = 0
2145 N$(N) = " "
2150 RETURN
3000 REM DISPLAY
3010 HTAB 1: VTAB 8
3020 PRINT "NOTES: C # D # E F # G # A # B C # DKEYS : Q 2 W 3 E R 5 T 6 Y 7 U I 9 O"
3030 PRINT "NOTES: # E F # G # A # B C # D # E KEYS : 0 P Z S X D C F V B H N J M "
3040 PRINT "NOTES: F # G #": PRINT "KEYS : , L . ;"
3050 PRINT : PRINT "HIT THE : KEY TO CHANGE TONE LENGTH. IT SHOULD BE FOLLOWED BY A NUMBER KEY."
3060 PRINT "/ DELETE - INSERT ESC: STOP": PRINT "HIT RETURN TO ENTER NONSTANDARD NOTE."
3070 RETURN
4000 REM SAVE
4010 HOME : PRINT : PRINT D$"CATALOG"
4020 PRINT : INPUT "FILE TO SAVE: ";I$
4025 IF I$ = "" THEN RETURN
4030 PRINT D$"OPEN "I$: PRINT D$"WRITE"I$
4040 PRINT NL
4050 FOR A = 1 TO NL: PRINT T%(A): PRINT L%(A): NEXT A
4055 FOR A = 1 TO NL: PRINT N$(A): NEXT A
4060 PRINT D$"CLOSE": RETURN
5000 REM LOAD
5010 HOME : PRINT : PRINT D$"CATALOG"
5020 PRINT : INPUT "FILE TO LOAD: ";I$
5025 IF I$ = "" THEN RETURN
5030 PRINT D$"OPEN"I$: PRINT D$"READ"I$
5040 INPUT NL
5050 FOR A = 1 TO NL: INPUT T%(A): INPUT L%(A): NEXT A
5055 FOR A = 1 TO NL: INPUT N$(A): NEXT A
5060 PRINT D$"CLOSE": RETURN
10000 REM DATA
10010 REM NOTES
10030 DATA -1,51,61,64,165
10040 DATA 57,-1,48,102,43
10050 DATA -1,36,41,46,92
10060 DATA 82,202,155,74,139
10070 DATA 110,54,185,68,125
10080 DATA 78
10090 DATA 87,-1,195,175,-1
10100 DATA 149,132,117,-1,99
10990 DATA -999